When first started, the C shell normally performs commands from the
_...._cccc_ssss_hhhh_rrrr_cccc file in your home directory, provided that it is readable and you
either own it or your real group ID matches its group ID. If the shell
is invoked with a name that starts with `_----', as when started by _llll_oooo_gggg_iiii_nnnn(1),
the shell runs as a _llll_oooo_gggg_iiii_nnnn shell. In this case, before executing the
commands from the _...._cccc_ssss_hhhh_rrrr_cccc file, the shell executes the commands from the
following files in the order specified: _////_eeee_tttt_cccc_////_cccc_ssss_hhhh_rrrr_cccc, _////_eeee_tttt_cccc_////_...._llll_oooo_gggg_iiii_nnnn and
_////_eeee_tttt_cccc_////_cccc_ssss_hhhh_...._cccc_ssss_hhhh_rrrr_cccc. These files can be used to provide system-wide settings
for all _cccc_ssss_hhhh users. After executing commands from the _...._cccc_ssss_hhhh_rrrr_cccc file, a
login shell executes commands from the _...._llll_oooo_gggg_iiii_nnnn file in your home
directory; the same permission checks as those for _...._cccc_ssss_hhhh_rrrr_cccc are applied to
this file. Typically, the _...._llll_oooo_gggg_iiii_nnnn file contains commands to specify the
terminal type and environment. Please note that _cccc_ssss_hhhh can run as a _llll_oooo_gggg_iiii_nnnn
shell if it is invoked upon startup of a window shell such as _xxxx_wwww_ssss_hhhh(1G).
This is so any terminal type information that might be contained in the
_...._llll_oooo_gggg_iiii_nnnn file(s) can be made known to the window shell.
As a login shell terminates, it performs commands from the _...._llll_oooo_gggg_oooo_uuuu_tttt file
in your home directory; the same permission checks as those for _...._cccc_ssss_hhhh_rrrr_cccc
The shell splits input lines into words at space and tab characters,
except as noted below. The characters _&&&&, _||||, _;;;;, _<<<<, _>>>>, _((((, and _)))) form
separate words; if paired, the pairs form single words. These shell
metacharacters can be made part of other words, and their special meaning
can be suppressed by preceding them with a `_\\\\' (backslash). A newline
preceded by a _\\\\ is equivalent to a space character.
In addition, a string enclosed in matched pairs of single-quotes (_''''),
double-quotes (_""""), or backquotes (_````), forms a partial word;
metacharacters in such a string, including any space or tab characters,
do not form separate words. Within pairs of backquote (`_)))) or double-
quote (_"""") characters, a newline preceded by a `_\\\\' (backslash) gives a
true newline character. Additional functions of each type of quote are
described, below, under _VVVV_aaaa_rrrr_iiii_aaaa_bbbb_llll_eeee _SSSS_uuuu_bbbb_ssss_tttt_iiii_tttt_uuuu_tttt_iiii_oooo_nnnn, _CCCC_oooo_mmmm_mmmm_aaaa_nnnn_dddd _SSSS_uuuu_bbbb_ssss_tttt_iiii_tttt_uuuu_tttt_iiii_oooo_nnnn, and
The C shell maintains a set of _v_a_r_i_a_b_l_e_s, each of which is composed of a
_n_a_m_e and a _v_a_l_u_e. A variable name consists of up to 20 letters and
digits, and starts with a letter (the underscore is considered a letter).
A variable's value is a space-separated list of zero or more words.
To refer to a variable's value, precede its name with a `_$$$$'. Certain
references (described below) can be used to select specific words from
the value, or to display other information about the variable. Braces
can be used to insulate the reference from other characters in an input-
line word.
Variable substitution takes place after the input line is analyzed,
aliases are resolved, and I/O redirections are applied. Exceptions to
this are variable references in I/O redirections (substituted at the time
the redirection is made), and backquoted strings (see Command
Substitution).
Variable substitution can be suppressed by preceding the _$$$$ with a _\\\\,
except within double-quotes where it always occurs. Variable
substitution is suppressed inside of single-quotes. A _$$$$ is escaped if
followed by a space character, tab or newline.
Variables can be created, displayed, or destroyed using the _ssss_eeee_tttt and _uuuu_nnnn_ssss_eeee_tttt
commands. Some variables are maintained or used by the shell. For
instance, the _aaaa_rrrr_gggg_vvvv variable contains an image of the shell's argument
list. Of the variables used by the shell, a number are toggles; the
shell does not care what their value is, only whether they are set or
not.
Numerical values can be operated on as numbers (as with the _@@@@ built-in).
With numeric operations, an empty value is considered to be zero; the
second and subsequent words of multiword values are ignored. For
instance, when the _vvvv_eeee_rrrr_bbbb_oooo_ssss_eeee variable is set to any value (including an
empty value), command input is echoed on the terminal.
Command and filename substitution is subsequently applied to the words
that result from the variable substitution, except when suppressed by
double-quotes, when _nnnn_oooo_gggg_llll_oooo_bbbb is set (suppressing filename substitution), or
PPPPaaaaggggeeee 7777
ccccsssshhhh((((1111)))) ccccsssshhhh((((1111))))
when the reference is quoted with the _::::_qqqq modifier. Within double-quotes,
a reference is expanded to form (a portion of) a quoted string; multiword
values are expanded to a string with embedded space characters. When the
_::::_qqqq modifier is applied to the reference, it is expanded to a list of
space-separated words, each of which is quoted to prevent subsequent
command or filename substitutions.
Except as noted below, it is an error to refer to a variable that is not
set.
_$$$$_v_a_r
_$$$$_{{{{_v_a_r_}}}} These are replaced by words from the value of _v_a_r, each
separated by a space character. If _v_a_r is an environment
variable, its value is returned (but `_::::' modifiers and
the other forms given below are not available).
_$$$$_v_a_r[_i_n_d_e_x]
_$$$$_{{{{_v_a_r_[[[[_i_n_d_e_x_]]]]_}}}} These select only the indicated words from the value of
_v_a_r. Variable substitution is applied to _i_n_d_e_x, which can
consist of (or result in) a either single number, two
numbers separated by a `_----', or an asterisk. Words are
indexed starting from 1; a `_****' selects all words. If the
first number of a range is omitted (as with _$$$$_aaaa_rrrr_gggg_vvvv_[[[[_----_2222_]]]]), it
defaults to 1. If the last number of a range is omitted
(as with _$$$$_aaaa_rrrr_gggg_vvvv_[[[[_1111_----_]]]]), it defaults to _$$$$_####_v_a_r (the word
count). It is not an error for a range to be empty if the
second argument is omitted (or within range).
_$$$$_####_n_a_m_e
_$$$$_{{{{_####_n_a_m_e_}}}} These give the number of words in the variable.
_$$$$_0000 This substitutes the name of the file from which command
input is being read. An error occurs if the name is not
known.
_$$$$_n
_$$$$_{{{{_n_}}}} Equivalent to _$$$$_aaaa_rrrr_gggg_vvvv_[[[[_n_]]]].
_$$$$_**** Equivalent to _$$$$_aaaa_rrrr_gggg_vvvv_[[[[_****_]]]].
The modifiers _::::_eeee, _::::_hhhh, _::::_qqqq, _::::_rrrr, _::::_tttt and _::::_xxxx can be applied (see _HHHH_iiii_ssss_tttt_oooo_rrrr_yyyy
_SSSS_uuuu_bbbb_ssss_tttt_iiii_tttt_uuuu_tttt_iiii_oooo_nnnn), as can _::::_gggg_hhhh, _::::_gggg_tttt and _::::_gggg_rrrr. If _{{{{_}}}} (braces) are used, then
the modifiers must appear within the braces. The current implementation
allows only one such modifier per expansion.
The following references cannot be modified with _:::: modifiers.
_$$$$_????_v_a_r
_$$$$_{{{{_????_v_a_r_}}}} Substitutes the string 1 if _v_a_r is set or 0 if it is not set.
PPPPaaaaggggeeee 8888
ccccsssshhhh((((1111)))) ccccsssshhhh((((1111))))
_$$$$_????_0000 Substitutes 1 if the current input filename is known, or 0 if
it is not.
_$$$$_$$$$ Substitute the process number of the (parent) shell.
_$$$$_<<<< Substitutes a line from the standard input, with no further
interpretation thereafter. It can be used to read from the
A number of C shell built-in commands accept expressions, in which the
operators are similar to those of C and have the same precedence. These
expressions typically appear in the _@@@@, _eeee_xxxx_iiii_tttt, _iiii_ffff, _ssss_eeee_tttt and _wwww_hhhh_iiii_llll_eeee commands,
and are often used to regulate the flow of control for executing
commands. Components of an expression are separated by white space.
Null or missing values are considered 0. The result of all expressions
are strings, which can represent decimal numbers.
The following C shell operators are grouped in order of precedence:
_((((..._)))) grouping
_~~~~ one's complement
_!!!! logical negation
_**** _//// _%%%% multiplication, division, remainder (These are right
associative, which can lead to unexpected results.
Group combinations explicitly with parentheses.)
_++++ _---- addition, subtraction (also right associative)
_<<<<_<<<< _>>>>_>>>> bitwise shift left, bitwise shift right
_<<<< _>>>> _<<<<_==== _>>>>_==== less than, greater than, less than or equal to,
greater than or equal to
_====_==== _!!!!_==== _====_~~~~ _!!!!_~~~~ equal to, not equal to, filename-substitution pattern
match (described below), filename-substitution
pattern mismatch
_&&&& bitwise AND
_^^^^ bitwise XOR (exclusive or)
_|||| bitwise inclusive OR
_&&&&_&&&& logical AND
_||||_|||| logical OR
The operators: _====_====, _!!!!_====, _====_~~~~, and _!!!!_~~~~ compare their arguments as strings;
other operators use numbers. The operators _====_~~~~ and _!!!!_~~~~ each check whether
or not a string to the left matches a filename substitution pattern on
the right. This reduces the need for _ssss_wwww_iiii_tttt_cccc_hhhh statements when pattern-
matching between strings is all that is required.
Also available are file inquiries:
_----_rrrr _f_i_l_e Return true, or 1 if the user has read access. Otherwise it
returns false, or 0.
_----_wwww _f_i_l_e True if the user has write access.
_----_xxxx _f_i_l_e True if the user has execute permission (or search permission
on a directory).
PPPPaaaaggggeeee 11110000
ccccsssshhhh((((1111)))) ccccsssshhhh((((1111))))
_----_eeee _f_i_l_e True if _f_i_l_e exists.
_----_oooo _f_i_l_e True if the user owns _f_i_l_e.
_----_zzzz _f_i_l_e True if _f_i_l_e is of zero length (empty).
_----_ffff _f_i_l_e True if _f_i_l_e is a plain file.
_----_dddd _f_i_l_e True if _f_i_l_e is a directory.
_----_llll _f_i_l_e True if _f_i_l_e is a symbolic link.
_----_cccc _f_i_l_e True if _f_i_l_e is a character special file.
_----_bbbb _f_i_l_e True if _f_i_l_e is a block special file.
_----_pppp _f_i_l_e True if _f_i_l_e is a named pipe (fifo).
_----_uuuu _f_i_l_e True if _f_i_l_e has the set-user-ID permission bit set (see
_c_h_m_o_d(1)).
_----_gggg _f_i_l_e True if _f_i_l_e has the set-group-ID permission bit set (see
_c_h_m_o_d(1)).
_----_kkkk _f_i_l_e True if _f_i_l_e has the sticky bit set (see _c_h_m_o_d(1)).
_----_ssss _f_i_l_e True if _f_i_l_e has size strictly greater than zero.
_----_tttt _f_i_l_e True if _f_i_l_e is an open file descriptor for a terminal device.
If _f_i_l_e does not exist or is inaccessible, then all inquiries return
false.
An inquiry as to the success of a command is also available:
_{{{{ _c_o_m_m_a_n_d _}}}} If _c_o_m_m_a_n_d runs successfully, the expression evaluates to
true, 1. Otherwise it evaluates to false 0. (Note that,
conversely, _c_o_m_m_a_n_d itself typically returns 0 when it
runs successfully, or some other value if it encounters a
problem. If you want to get at the status directly, use
the value of the _ssss_tttt_aaaa_tttt_uuuu_ssss variable rather than this
expression).
CCCCoooonnnnttttrrrroooollll FFFFlllloooowwww
The shell contains a number of commands to regulate the flow of control
in scripts, and within limits, from the terminal. These commands operate
by forcing the shell either to reread input (to _l_o_o_p), or to skip input
under certain conditions (to _b_r_a_n_c_h).
Each occurrence of a _ffff_oooo_rrrr_eeee_aaaa_cccc_hhhh, _ssss_wwww_iiii_tttt_cccc_hhhh, _wwww_hhhh_iiii_llll_eeee, _iiii_ffff..._tttt_hhhh_eeee_nnnn and _eeee_llll_ssss_eeee built-in
must appear as the first word on its own input line.
If the shell's input is not seekable and a loop is being read, that input
is buffered. The shell performs seeks within the internal buffer to
accomplish the rereading implied by the loop. (To the extent that this
allows, backward _gggg_oooo_tttt_oooo commands succeed on nonseekable inputs.)
Unlike the standard shell, the C shell maintains a distinction between
environment variables, which are automatically exported to processes it
invokes, and shell variables, which are not. Both types of variables are
treated similarly under variable substitution. The shell sets the
variables _aaaa_rrrr_gggg_vvvv, _cccc_wwww_dddd, _hhhh_oooo_mmmm_eeee, _pppp_aaaa_tttt_hhhh, _pppp_rrrr_oooo_mmmm_pppp_tttt, _ssss_hhhh_eeee_llll_llll, and _ssss_tttt_aaaa_tttt_uuuu_ssss upon
initialization. The shell copies the environment variable _UUUU_SSSS_EEEE_RRRR into the
shell variable _uuuu_ssss_eeee_rrrr, _TTTT_EEEE_RRRR_MMMM into _tttt_eeee_rrrr_mmmm, and _HHHH_OOOO_MMMM_EEEE into _hhhh_oooo_mmmm_eeee, and copies each
back into the respective environment variable whenever the shell
variables are reset. _PPPP_AAAA_TTTT_HHHH and _pppp_aaaa_tttt_hhhh are similarly handled. You need only
set _pppp_aaaa_tttt_hhhh once in the _...._cccc_ssss_hhhh_rrrr_cccc or _...._llll_oooo_gggg_iiii_nnnn file. The environment variable _PPPP_WWWW_DDDD
is set from _cccc_wwww_dddd whenever the latter changes. The following shell
variables have predefined meanings:
_aaaa_rrrr_gggg_vvvv Argument list. Contains the list of command-line arguments
supplied to the current invocation of the shell. This variable
determines the value of the positional parameters _$$$$_1111, _$$$$_2222, and
so on. Note: _aaaa_rrrr_gggg_vvvv_[[[[_0000_]]]] does not contain the command name.
_cccc_dddd_pppp_aaaa_tttt_hhhh Contains a list of directories to be searched by the _cccc_dddd, _cccc_hhhh_dddd_iiii_rrrr,
and _pppp_oooo_pppp_dddd commands, if the directory argument each accepts is
not a subdirectory of the current directory.
_cccc_hhhh_iiii_llll_dddd The process id of the most recently started background job.
_cccc_wwww_dddd The full pathname of the current directory.
_eeee_cccc_hhhh_oooo Echo commands (after substitutions), just before execution.
_ffff_iiii_gggg_nnnn_oooo_rrrr_eeee A list of filename suffixes to ignore when attempting filename
completion. Typically the single word `_...._oooo'.
_ffff_iiii_llll_eeee_cccc Enable filename completion, in which case the <Ctrl-d>
character <Ctrl-d>) and the ESC character have special
significance when typed in at the end of a terminal input line:
EOT Print a list of all filenames that start with the
preceding string.
ESC Replace the preceding string with the longest unambiguous
extension.
_hhhh_aaaa_rrrr_dddd_pppp_aaaa_tttt_hhhh_ssss If set, pathnames in the directory stack are resolved to
contain no symbolic-link components.
_hhhh_iiii_ssss_tttt_cccc_hhhh_aaaa_rrrr_ssss A two-character string. The first character replaces _!!!! as the
history-substitution character. The second replaces the carat
(_^^^^) for quick substitutions.
PPPPaaaaggggeeee 22222222
ccccsssshhhh((((1111)))) ccccsssshhhh((((1111))))
_hhhh_iiii_ssss_tttt_oooo_rrrr_yyyy The number of lines saved in the history list. A very large
number may use up all of the C shell's memory. If not set, the
C shell saves only the most recent command.
_hhhh_oooo_mmmm_eeee The user's home directory. The filename expansion of _~~~~ refers
to the value of this variable.
_iiii_gggg_nnnn_oooo_rrrr_eeee_eeee_oooo_ffff If set, the shell ignores EOF from terminals. This protects
against accidentally killing a C shell by typing a <Ctrl-d>.
_mmmm_aaaa_iiii_llll A list of files where the C shell checks for mail. If the
first word of the value is a number, it specifies a mail
checking interval in seconds (default 5 minutes).
_nnnn_oooo_bbbb_eeee_eeee_pppp Suppress the bell during command completion when asking the C
shell to extend an ambiguous filename.
_nnnn_oooo_cccc_llll_oooo_bbbb_bbbb_eeee_rrrr Restrict output redirection so that existing files are not
destroyed by accident. _>>>> redirections can only be made to new
files. _>>>>_>>>> redirections can only be made to existing files.
_nnnn_oooo_gggg_llll_oooo_bbbb Inhibit filename substitution. This is most useful in shell
scripts once filenames (if any) are obtained and no further
expansion is desired.
_nnnn_oooo_nnnn_oooo_mmmm_aaaa_tttt_cccc_hhhh Returns the filename substitution pattern, rather than an
error, if the pattern is not matched. Malformed patterns still
result in errors.
_nnnn_oooo_tttt_iiii_ffff_yyyy If set, the shell notifies you immediately as jobs are
completed, rather than waiting until just before issuing a
prompt.
_pppp_aaaa_tttt_hhhh The list of directories in which to search for commands. _pppp_aaaa_tttt_hhhh
is initialized from the environment variable _PPPP_AAAA_TTTT_HHHH, which the C
shell updates whenever _pppp_aaaa_tttt_hhhh changes. A null word specifies the
current directory. The default search path for normal users
is: _((((_.... _////_uuuu_ssss_rrrr_////_ssss_bbbb_iiii_nnnn _////_uuuu_ssss_rrrr_////_bbbb_ssss_dddd _////_bbbb_iiii_nnnn _////_uuuu_ssss_rrrr_////_bbbb_iiii_nnnn _////_uuuu_ssss_rrrr_////_bbbb_iiii_nnnn_////_XXXX_1111_1111_)))). For
the privileged user, the default search path is: _((((_////_uuuu_ssss_rrrr_////_ssss_bbbb_iiii_nnnn
_////_uuuu_ssss_rrrr_////_bbbb_ssss_dddd _////_bbbb_iiii_nnnn _////_uuuu_ssss_rrrr_////_bbbb_iiii_nnnn _////_eeee_tttt_cccc _////_uuuu_ssss_rrrr_////_eeee_tttt_cccc _////_uuuu_ssss_rrrr_////_bbbb_iiii_nnnn_////_XXXX_1111_1111_)))). If _pppp_aaaa_tttt_hhhh
becomes unset, only full pathnames execute. An interactive C
shell normally hashes the contents of the directories listed
after reading _...._cccc_ssss_hhhh_rrrr_cccc, and whenever _pppp_aaaa_tttt_hhhh is reset. If new
commands are added, use the _rrrr_eeee_hhhh_aaaa_ssss_hhhh command to update the table.
_pppp_rrrr_oooo_mmmm_pppp_tttt The string an interactive C shell prompts with. Noninteractive
shells leave the _pppp_rrrr_oooo_mmmm_pppp_tttt variable unset. Aliases and other
commands in the _...._cccc_ssss_hhhh_rrrr_cccc file that are only useful interactively,
can be placed after the following test: `_iiii_ffff _((((_$$$$_????_pppp_rrrr_oooo_mmmm_pppp_tttt _====_==== _0000_))))
_eeee_xxxx_iiii_tttt', to reduce startup time for noninteractive shells. A _!!!!
in the _pppp_rrrr_oooo_mmmm_pppp_tttt string is replaced by the current event number.
The default prompt is _h_o_s_t_n_a_m_e_%%%% for mere mortals, or _h_o_s_t_n_a_m_e_####
PPPPaaaaggggeeee 22223333
ccccsssshhhh((((1111)))) ccccsssshhhh((((1111))))
for the privileged user.
If the _pppp_rrrr_oooo_mmmm_pppp_tttt string includes the sequence _\\\\_@@@@_x, where _x is one
of the characters listed below, it is replaced by the current
time and date in the indicated format.
RRRR time as HH:MM AM/PM, for example, 8:40PM
rrrr time as HH:MM:SS AM/PM, for example, 08:40:25 PM
mmmm month of year - 01 to 12
dddd day of month - 01 to 31
yyyy last 2 digits of year - 00 to 99
DDDD date as mm/dd/yy
HHHH hour - 00 to 23
MMMM minute - 00 to 59
SSSS second - 00 to 59
TTTT time as HH:MM:SS
jjjj day of year - 001 to 366
wwww day of week - Sunday = 0
aaaa abbreviated weekday - Sun to Sat
hhhh abbreviated month - Jan to Dec
nnnn insert a newline character
tttt insert a tab character
_ssss_aaaa_vvvv_eeee_hhhh_iiii_ssss_tttt The number of lines from the history list that are saved in
_~~~~_////_...._hhhh_iiii_ssss_tttt_oooo_rrrr_yyyy when the user logs out. Large values for _ssss_aaaa_vvvv_eeee_hhhh_iiii_ssss_tttt
slow down the C shell during startup. To prevent _ssss_uuuu sessions
from overwriting the underlying user's history file, the shell
only writes in the _~~~~_////_...._hhhh_iiii_ssss_tttt_oooo_rrrr_yyyy file if its current effective
user id is the same as the owner of the directory specified by
the _hhhh_oooo_mmmm_eeee variable.
_ssss_hhhh_eeee_llll_llll The file in which the C shell resides. This is used in forking
shells to interpret files that have execute bits set, but that
are not executable by the system.
_ssss_tttt_aaaa_tttt_uuuu_ssss The status returned by the most recent command. If that
command terminated abnormally, 0200 is added to the status.
Built-in commands that fail return exit status 1, all other
built-in commands set status to 0.
_tttt_iiii_mmmm_eeee Control automatic timing of commands. Can be supplied with one
or two values. The first is the reporting threshold in CPU
seconds. The second is a string of tags and text indicating
which resources to report on. A tag is a percent sign (_%%%%)
followed by a single _u_p_p_e_r-_c_a_s_e letter (unrecognized tags print
as text):
_%%%%_DDDD Average amount of unshared data space used in Kilobytes.
_%%%%_EEEE Elapsed (wallclock) time for the command.
_%%%%_FFFF Page faults.
PPPPaaaaggggeeee 22224444
ccccsssshhhh((((1111)))) ccccsssshhhh((((1111))))
_%%%%_IIII Number of block input operations.
_%%%%_KKKK Average amount of unshared stack space used in Kilobytes.
_%%%%_MMMM Maximum real memory used during execution of the process
in Kilobytes.
_%%%%_OOOO Number of block output operations.
_%%%%_PPPP Total CPU time -- U (user) plus S (system) -- as a
percentage of E (elapsed) time.
_%%%%_SSSS Number of seconds of CPU time consumed by the kernel on
behalf of the user's process.
_%%%%_UUUU Number of seconds of CPU time devoted to the user's
process.
_%%%%_WWWW Number of swaps.
_%%%%_XXXX Average amount of shared memory used in Kilobytes.
The default summary display outputs from the _%%%%_UUUU, _%%%%_SSSS, _%%%%_EEEE, _%%%%_PPPP,
_%%%%_XXXX, _%%%%_DDDD, _%%%%_IIII, _%%%%_OOOO, _%%%%_FFFF and _%%%%_WWWW tags, in that order.
Note that the values for _%%%%_DDDD, _%%%%_KKKK, and _%%%%_XXXX always print as zero
since the IRIX kernel does not maintain the _gggg_eeee_tttt_rrrr_uuuu_ssss_aaaa_gggg_eeee(3)
counters required to calculate them.
_vvvv_eeee_rrrr_bbbb_oooo_ssss_eeee Display each command after history substitution takes place.
FFFFIIIILLLLEEEESSSS
_~~~~_////_...._cccc_ssss_hhhh_rrrr_cccc Read at beginning of execution by each shell.
_////_eeee_tttt_cccc_////_cccc_ssss_hhhh_rrrr_cccc Read by login shells before _...._cccc_ssss_hhhh_rrrr_cccc at login.
_////_eeee_tttt_cccc_////_...._llll_oooo_gggg_iiii_nnnn Read by login shells before _...._cccc_ssss_hhhh_rrrr_cccc and after _////_eeee_tttt_cccc_////_cccc_ssss_hhhh_rrrr_cccc.
_////_eeee_tttt_cccc_////_cccc_ssss_hhhh_...._cccc_ssss_hhhh_rrrr_cccc Read by login shells before _...._cccc_ssss_hhhh_rrrr_cccc and after _////_eeee_tttt_cccc_////_...._llll_oooo_gggg_iiii_nnnn.
_~~~~_////_...._llll_oooo_gggg_iiii_nnnn Read by login shells after _...._cccc_ssss_hhhh_rrrr_cccc at login.
_~~~~_////_...._llll_oooo_gggg_oooo_uuuu_tttt Read by login shells at logout.
_~~~~_////_...._hhhh_iiii_ssss_tttt_oooo_rrrr_yyyy Saved history for use at next login.
_////_uuuu_ssss_rrrr_////_bbbb_iiii_nnnn_////_ssss_hhhh Standard shell, for shell scripts not starting with a `_####'.
_////_tttt_mmmm_pppp_////_ssss_hhhh_**** Temporary file for `_<<<<_<<<<'.
_////_eeee_tttt_cccc_////_pppp_aaaa_ssss_ssss_wwww_dddd Source of home directories for `_~~~~_n_a_m_e'.
This can often be avoided by using multiple commands, the _x_a_r_g_s(1)
command, or by increasing the nnnnccccaaaarrrrggggssss kernel parameter with the
_s_y_s_t_u_n_e(1m) command. If the kernel parameter is increased, currently
running _c_s_h's will not notice the change. It is necessary to start a new
shell, or logout and back in, for the change to be effective.
To detect looping, the shell restricts the number of _aaaa_llll_iiii_aaaa_ssss substitutions
on a single line to 20.
When a command is restarted from a stop, the shell prints the directory
it started in if this is different from the current directory; this can
be misleading (that is, wrong) as the job may have changed directories
internally.
Shell built-in functions are not stoppable/restartable. Command
sequences of the form _a _;;;; _b _;;;; _c are also not handled gracefully when
stopping is attempted. If you suspend _b, the shell never executes _c.
This is especially noticeable if the expansion results from an alias. It
can be avoided by placing the sequence in parentheses to force it into a
subshell.
Control over terminal output after processes are started is primitive.
Multiline shell procedures should be provided, as they are with the
standard (Bourne) shell.
Commands within loops, prompted for by _????, are not placed in the _h_i_s_t_o_r_y
list.
Control structures should be parsed rather than being recognized as
built-in commands. This would allow control commands to be placed
anywhere, to be combined with _||||, and to be used with _&&&& and _;;;; metasyntax.
It should be possible to use the _:::: modifiers on the output of command
substitutions. There are two problems with _:::: modifier usage on variable
substitutions: not all of the modifiers are available, and only one
modifier per substitution is allowed.
The _gggg (global) flag in history substitutions applies only to the first
match in each word, rather than all matches in all words. The the
standard text editors consistently do the latter when given the _gggg flag in
a substitution command.
Quoting conventions are confusing. Overriding the escape character to
force variable substitutions within double quotes is counterintuitive and
inconsistent with the Bourne shell.
Symbolic links can fool the shell. Setting the _hhhh_aaaa_rrrr_dddd_pppp_aaaa_tttt_hhhh_ssss variable
alleviates this.
PPPPaaaaggggeeee 22226666
ccccsssshhhh((((1111)))) ccccsssshhhh((((1111))))
`_ssss_eeee_tttt _pppp_aaaa_tttt_hhhh' should remove duplicate pathnames from the pathname list.
These often occur because a shell script or a _...._cccc_ssss_hhhh_rrrr_cccc file does something
like `_ssss_eeee_tttt _pppp_aaaa_tttt_hhhh_====_((((_////_uuuu_ssss_rrrr_////_llll_oooo_cccc_aaaa_llll _////_uuuu_ssss_rrrr_////_hhhh_oooo_ssss_tttt_ssss _$$$$_pppp_aaaa_tttt_hhhh_))))' to ensure that the named
directories are in the pathname list.
The only way to direct the standard output and standard error separately